给定一个含有 n 个正整数的数组和一个正整数 s ，找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组，并返回其长度。
如果不存在符合条件的子数组，返回 0。

示例：

输入：s = 7, nums = [2,3,1,2,4,3]
输出：2
解释：子数组 [4,3] 是该条件下的长度最小的子数组。

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        #最暴力的方法是O(n^2) 因为连续子数组肯定有起点终点  遍历所有起点终点的可能即可
        #暴力法缺少去寻找小数组的趋势 比如 0为起点 1-n依次为终点 假如0-3已经满足 那后面的扩展（0-4，0-5）就是没什么意义的 就是一种浪费了
        #滑动窗口就是消减了这部分的趋势
        
        if len(nums)==0:
            return 0
        
        start, end = 0, 0
        sum_cur = nums[0]
        min_len = len(nums)+1
        
        while end < len(nums) and start<=end:
            subLen = end-start+1
            if sum_cur >= s:
                if subLen == 1:
                    return 1
                min_len = min(subLen, min_len)
                
                sum_cur -= nums[start]
                start += 1
                
            else:#sum_cur < s
                end += 1
                if end < len(nums):
                    sum_cur += nums[end]
        
        if min_len == len(nums)+1:#全部数组加起来都没有s大的情况
            return 0
        else:
            return min_len